package br.uvv.sao.managedBean;

import java.io.Serializable;
import java.util.ArrayList;

import br.uvv.sao.domain.Disciplina;
import br.uvv.sao.rn.DisciplinaRN;
import br.uvv.sao.util.MsgUtil;
import br.uvv.sao.util.RNException;

public class DisciplinaBean implements Serializable {

	private static final long serialVersionUID = 2661214326105009204L;

	private DisciplinaRN disciplinaRN = new DisciplinaRN();
	
	private Disciplina disciplinaInstance;
	private Disciplina disciplinaInstanceTemp;
	private ArrayList<Disciplina> disciplinaList;

	private Boolean instancia; 
	
	private String campoBuscaNome;
	private String campoBuscaCodigo;
	
	private void init(){
		disciplinaInstance = disciplinaInstanceTemp = new Disciplina();
		disciplinaList = new ArrayList<Disciplina>();
		campoBuscaNome = campoBuscaCodigo = "";
		instancia = true;
	}
	
	public String disciplina(){
		init();
		return "goDisciplinas";
	}
	
	public String goHome(){
		init();
		return "goHome";
	}
	
	public String goCreate(){
		if (disciplinaInstance != null && disciplinaInstance.getId() != null && disciplinaInstance.getId() > 0){
			disciplinaInstanceTemp = disciplinaInstance;
		}
		disciplinaInstance = new Disciplina();
		disciplinaInstance.setCodigo(disciplinaRN.gerarCodigo());
		return "goCreate";
	}
	
	public String salvar(){
		try {
			disciplinaRN.salvar(disciplinaInstance);
			MsgUtil.msgInfo("A disciplina '" + disciplinaInstance.getNome() + "' foi criada com sucesso!");
			return "goShow";
		} catch (Exception e){
			MsgUtil.msgInfo("Ocorreu um erro ao criar a disciplina '" + disciplinaInstance.getNome() + "'!");
			return null;
		}
	}
	
	public String desistir(){
		init();
		return null;
	}
	
	public String goEdit(){
		return "goEdit";
	}
	
	public String atualizar(){
		try {
			disciplinaRN.salvar(disciplinaInstance);
			MsgUtil.msgInfo("A disciplina '" + disciplinaInstance.getNome() + "' foi atualizada com sucesso!");
			return "goShow";
		} catch (Exception e){
			MsgUtil.msgInfo("Ocorreu um erro ao atualizar a disciplina '" + disciplinaInstance.getNome() + "'!");
			return null;
		}
	}
	
	public String desistirEdit(){
		if (disciplinaInstance != null && disciplinaInstance.getId() != null && disciplinaInstance.getId() >0){
//			disciplinaInstance = disciplinaInstanceTemp;
		} else {
			disciplinaInstance = new Disciplina();
		}
		return "goShow";
	}
	
	public String excluir(){
		try {
			disciplinaRN.excluir(disciplinaInstance);
			MsgUtil.msgInfo("A disciplina '" + disciplinaInstance.getNome() + "' foi removida com sucesso!");
			return "goShow";
		} catch (Exception e){
			MsgUtil.msgInfo("Ocorreu um erro ao remover a disciplina '" + disciplinaInstance.getNome() + "'!");
			return null;
		}
	}
	
	public void filtrarDisciplina(){
		try {
			disciplinaList = (ArrayList<Disciplina>) disciplinaRN.listar(campoBuscaCodigo, campoBuscaNome);
		} catch (RNException e) {
			e.printStackTrace();
		}
		campoBuscaNome = campoBuscaCodigo = "";
	}
	
	public String selecionarDisciplina(){
		if (disciplinaInstanceTemp != null){
			disciplinaInstance = disciplinaInstanceTemp;
			disciplinaInstanceTemp = new Disciplina();
			disciplinaList = new ArrayList<Disciplina>();
			campoBuscaNome = campoBuscaCodigo = "";
			instancia = false;
			MsgUtil.msgInfo("Disciplina '" + disciplinaInstance.getNome() + "' selecionada com sucesso!");
		} else {
			MsgUtil.msgInfo("Nenhuma disciplina foi selecionada!");
		}
		
		return null;
	}
	
	public Disciplina getDisciplinaInstance() {
		return disciplinaInstance;
	}
	public void setDisciplinaInstance(Disciplina disciplinaInstance) {
		this.disciplinaInstance = disciplinaInstance;
	}
	public Disciplina getDisciplinaInstanceTemp() {
		return disciplinaInstanceTemp;
	}
	public void setDisciplinaInstanceTemp(Disciplina disciplinaInstanceTemp) {
		this.disciplinaInstanceTemp = disciplinaInstanceTemp;
	}
	public ArrayList<Disciplina> getDisciplinaList() {
		return disciplinaList;
	}
	public void setDisciplinaList(ArrayList<Disciplina> disciplinaList) {
		this.disciplinaList = disciplinaList;
	}
	public Boolean getInstancia() {
		return instancia;
	}
	public void setInstancia(Boolean instancia) {
		this.instancia = instancia;
	}
	public String getCampoBuscaCodigo() {
		return campoBuscaCodigo;
	}
	public void setCampoBuscaCodigo(String campoBuscaCodigo) {
		this.campoBuscaCodigo = campoBuscaCodigo;
	}
	public String getCampoBuscaNome() {
		return campoBuscaNome;
	}
	public void setCampoBuscaNome(String campoBuscaNome) {
		this.campoBuscaNome = campoBuscaNome;
	}
}
